package com.hnjfzn.mall.controller;

import com.hnjfzn.mall.domain.ProductCategory;
import com.hnjfzn.mall.service.ProductCategoryService;
import com.hnjfzn.mall.utils.SnowflakeIdGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.hnjfzn.common.core.web.domain.AjaxResult;

import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/product-categories")
public class ProductCategoryController {

    @Autowired
    private ProductCategoryService productCategoryService;

    @Autowired
    private SnowflakeIdGenerator snowflakeIdGenerator;

    // 添加商品分类
    @PostMapping("/add")
    public AjaxResult addProductCategory(@RequestBody ProductCategory productCategory) {
        // 生成唯一的 categoryId
        long categoryId = snowflakeIdGenerator.generateId();

        // 设置创建时间和更新时间
        Date currentTime = new Date();
        productCategory.setCreateTime(currentTime);
        productCategory.setUpdateTime(currentTime);
        productCategory.setCategoryId(categoryId);  // 设置生成的唯一 ID

        // 确保 productCategory 中的其他字段也已经赋值，进行有效性检查
        if (productCategory.getCategoryName() == null || productCategory.getCategoryName().isEmpty()) {
            return AjaxResult.error("Category name cannot be empty");
        }

        // 如果没有传递创建人和修改人，设为默认值
        if (productCategory.getCreateBy() == null || productCategory.getCreateBy().isEmpty()) {
            productCategory.setCreateBy("admin"); // 默认设置为 "admin"
        }

        if (productCategory.getUpdateBy() == null || productCategory.getUpdateBy().isEmpty()) {
            productCategory.setUpdateBy("admin"); // 默认设置为 "admin"
        }

        // 确保父分类ID设置（如果需要）
        if (productCategory.getParentCategoryId() == null) {
            productCategory.setParentCategoryId(0);  // 假设0表示无父分类
        }

        // 执行添加操作
        boolean result = productCategoryService.addProductCategory(productCategory);
        return result ? AjaxResult.success(productCategory) : AjaxResult.error();
    }

    // 根据分类ID查询商品分类
    @GetMapping("/{categoryId}")
    public AjaxResult getProductCategory(@PathVariable Long categoryId) {
        return AjaxResult.success(productCategoryService.getProductCategory(categoryId));
    }

    // 查询所有商品分类
    @GetMapping("/all")
    public AjaxResult getAllProductCategories() {
        List<ProductCategory> categories = productCategoryService.getAllProductCategories();
        return AjaxResult.success(categories);
    }

    // 更新商品分类
    @PutMapping("/{categoryId}")
    public AjaxResult updateProductCategory(@PathVariable Long categoryId, @RequestBody ProductCategory productCategory) {
        productCategory.setCategoryId(categoryId);
        productCategory.setUpdateTime(new Date()); // 更新时更新时间
        boolean result = productCategoryService.updateProductCategory(productCategory);
        return result ? AjaxResult.success() : AjaxResult.error();
    }

    // 删除商品分类
    @DeleteMapping("/{categoryId}")
    public AjaxResult deleteProductCategory(@PathVariable Long categoryId) {
        boolean result = productCategoryService.deleteProductCategory(categoryId);
        return result ? AjaxResult.success() : AjaxResult.error();
    }
}
